package br.usp.ime.ingpos.modelo;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class CartaDeRecomendacao
    implements
        Serializable
{
    private static final long serialVersionUID = - 805681813382151722L;

    @Id
    @GeneratedValue
    private Long cartaDeRecomendacaoID;
    
    @Column
    private TipoLingua lingua;

    @Column( length = 120, nullable = false )
    private String nome;

    @Column( length = 120, nullable = false )
    private String email;

    @Column( length = 120, unique = true, nullable = false )
    private String hash;

    @Column( length = 120, nullable = false )
    private String instituicao;

    @Column
    @Temporal( TemporalType.TIMESTAMP )
    private Date dataDeEnvio;

    @Column
    private String cargoQueOcupa;

    @Column
    private String grauAcademicoMaisAlto;

    @Column
    private String anoObtencao;

    @Column
    private String areaProfessor;

    @Column
    private String instituicaoObteveGrau;

    @OneToOne( cascade = {
        CascadeType.ALL
    } )
    private Endereco enderecoCorrespondencia;

    @Column
    private String tempoConheceCandidato;

    @Column
    private String cursoCandidato;

    @Column
    private String outraCondicaoConheceCandidato;

    @Column
    private String antecedentesAcademicos;

    @Column
    private String aproveitamentoSeAceito;

    @Column
    private String outrasInformacoes;

    @Column
    private String contextoCategoriaCantidato;

    @Column
    @Enumerated( EnumType.STRING )
    private TipoConheceCandidato tipoConheceCandidato;

    @Column
    @Enumerated( EnumType.STRING )
    private TipoCategoriaCandidato tipoCategoriaCandidato;

    @ManyToOne( cascade = CascadeType.ALL )
    private Usuario usuario;

    public CartaDeRecomendacao()
    {
    }

    public Long getCartaDeRecomendacaoID()
    {
        return cartaDeRecomendacaoID;
    }

    public void setCartaDeRecomendacaoID(
        Long cartaDeRecomendacaoID )
    {
        this.cartaDeRecomendacaoID = cartaDeRecomendacaoID;
    }

    public String getNome()
    {
        return nome;
    }

    public void setNome(
        String nome )
    {
        this.nome = nome;
    }

    public String getEmail()
    {
        return email;
    }

    public void setEmail(
        String email )
    {
        this.email = email;
    }

    public String getHash()
    {
        return hash;
    }

    public void setHash(
        String hash )
    {
        this.hash = hash;
    }

    public String getInstituicao()
    {
        return instituicao;
    }

    public void setInstituicao(
        String instituicao )
    {
        this.instituicao = instituicao;
    }

    public Date getDataDeEnvio()
    {
        return dataDeEnvio;
    }

    public void setDataDeEnvio(
        Date dataDeEnvio )
    {
        this.dataDeEnvio = dataDeEnvio;
    }

    public String getCargoQueOcupa()
    {
        return cargoQueOcupa;
    }

    public void setCargoQueOcupa(
        String cargoQueOcupa )
    {
        this.cargoQueOcupa = cargoQueOcupa;
    }

    public String getGrauAcademicoMaisAlto()
    {
        return grauAcademicoMaisAlto;
    }

    public void setGrauAcademicoMaisAlto(
        String grauAcademicoMaisAlto )
    {
        this.grauAcademicoMaisAlto = grauAcademicoMaisAlto;
    }

    public String getAnoObtencao()
    {
        return anoObtencao;
    }

    public void setAnoObtencao(
        String anoObtencao )
    {
        this.anoObtencao = anoObtencao;
    }

    public String getAreaProfessor()
    {
        return areaProfessor;
    }

    public void setAreaProfessor(
        String areaProfessor )
    {
        this.areaProfessor = areaProfessor;
    }

    public String getInstituicaoObteveGrau()
    {
        return instituicaoObteveGrau;
    }

    public void setInstituicaoObteveGrau(
        String instituicaoObteveGrau )
    {
        this.instituicaoObteveGrau = instituicaoObteveGrau;
    }

    public Endereco getEnderecoCorrespondencia()
    {
        return enderecoCorrespondencia;
    }

    public void setEnderecoCorrespondencia(
        Endereco enderecoCorrespondencia )
    {
        this.enderecoCorrespondencia = enderecoCorrespondencia;
    }

    public String getTempoConheceCandidato()
    {
        return tempoConheceCandidato;
    }

    public void setTempoConheceCandidato(
        String tempoConheceCandidato )
    {
        this.tempoConheceCandidato = tempoConheceCandidato;
    }

    public String getCursoCandidato()
    {
        return cursoCandidato;
    }

    public void setCursoCandidato(
        String cursoCandidato )
    {
        this.cursoCandidato = cursoCandidato;
    }

    public String getOutraCondicaoConheceCandidato()
    {
        return outraCondicaoConheceCandidato;
    }

    public void setOutraCondicaoConheceCandidato(
        String outraCondicaoConheceCandidato )
    {
        this.outraCondicaoConheceCandidato = outraCondicaoConheceCandidato;
    }

    public String getAntecedentesAcademicos()
    {
        return antecedentesAcademicos;
    }

    public void setAntecedentesAcademicos(
        String antecedentesAcademicos )
    {
        this.antecedentesAcademicos = antecedentesAcademicos;
    }

    public String getAproveitamentoSeAceito()
    {
        return aproveitamentoSeAceito;
    }

    public void setAproveitamentoSeAceito(
        String aproveitamentoSeAceito )
    {
        this.aproveitamentoSeAceito = aproveitamentoSeAceito;
    }

    public String getOutrasInformacoes()
    {
        return outrasInformacoes;
    }

    public void setOutrasInformacoes(
        String outrasInformacoes )
    {
        this.outrasInformacoes = outrasInformacoes;
    }

    public String getContextoCategoriaCantidato()
    {
        return contextoCategoriaCantidato;
    }

    public void setContextoCategoriaCantidato(
        String contextoCategoriaCantidato )
    {
        this.contextoCategoriaCantidato = contextoCategoriaCantidato;
    }

    public TipoConheceCandidato getTipoConheceCandidato()
    {
        return tipoConheceCandidato;
    }

    public void setTipoConheceCandidato(
        TipoConheceCandidato tipoConheceCandidato )
    {
        this.tipoConheceCandidato = tipoConheceCandidato;
    }

    public TipoCategoriaCandidato getTipoCategoriaCandidato()
    {
        return tipoCategoriaCandidato;
    }

    public void setTipoCategoriaCandidato(
        TipoCategoriaCandidato tipoCategoriaCandidato )
    {
        this.tipoCategoriaCandidato = tipoCategoriaCandidato;
    }

    public Usuario getUsuario()
    {
        return usuario;
    }

    public void setUsuario(
        Usuario usuario )
    {
        this.usuario = usuario;
    }

    public void setLingua(
        TipoLingua lingua )
    {
        this.lingua = lingua;
    }

    public TipoLingua getLingua()
    {
        return lingua;
    }

}
